home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / ansi / vtest.zip / VTEST.PAS < prev   
Pascal/Delphi Source File  |  1989-11-16  |  9KB  |  277 lines

  1. Program video_performance_test;
  2.  
  3. { $ DEFINE TEST}  { if defined, faster tests performed }
  4.  
  5. (*
  6. ┌───────────────────────────────────────────────────────────────────────────┐
  7. │                              VTEST.PAS                                    │
  8. ├───────────────────────────────────────────────────────────────────────────┤
  9. │   Version             : 1.0                                               │
  10. │   Computer            : IBM-PC or compatible                              │
  11. │   Lenguage            : Turbo Pascal 5.5                                  │
  12. │   Authors             : Bernardo Zamora                                   │
  13. ├──────────────────┬────────────────────────────────────────────────────────┤
  14. │   Explanation :  │                                                        │
  15. ├──────────────────┘                                                        │
  16. │   This program performs BIOS subfunctions 00-0Fh several times to         │
  17. │   measure their speed. Used to time the video-speed_up programs.          │
  18. │                                                                           │
  19. ├─────────┬───────────────────────────────────────────────────────┬─────────┤
  20. │ Date    │ Modifications                                         │ By ...  │
  21. ├─────────┼───────────────────────────────────────────────────────┼─────────┤
  22. │15-Nov-89│Program made and all 00-10fh functions added. V1.0     │Bernardo │
  23. │16-Nov-89│Include switches -F,-T,-S,-E. Modify test for routine  │Same guy!│
  24. │         │14h (Teletype) not to scroll screen.                   │         │
  25. │         │                                                       │         │
  26. │         │                                                       │         │
  27. └───────────────────────────────────────────────────────────────────────────┘
  28. *)
  29.  
  30.  
  31. uses
  32.   timing,
  33.   dos,
  34.   crt;
  35.  
  36.  
  37. const
  38.   MINTEST  = 0;
  39.   MAXTEST  = 15;
  40.   VideoText : array [0..15] of string = (
  41.     ('0 - Set Video Mode                    '),
  42.     ('1 - Set Cursor Size                   '),
  43.     ('2 - Set Cusor Position                '),
  44.     ('3 - Read Cursor Position              '),
  45.     ('4 - Read LightPen Position            '),
  46.     ('5 - Set active Display Page           '),
  47.     ('6 - Scroll Window Up                  '),
  48.     ('7 - Scroll Window Down                '),
  49.     ('8 - Read Character and Attribute      '),
  50.     ('9 - Write Character and Attribute     '),
  51.     ('A - Write Character                   '),
  52.     ('B - Set Color Palette                 '),
  53.     ('C - Write Pixel                       '),
  54.     ('D - Read Pixel                        '),
  55.     ('E - Write Character in teletype mode  '),
  56.     ('F - Get Current Video Mode            ')
  57.   );
  58.  
  59.  
  60. {$IFDEF TEST}
  61.   T : array [MINTEST..MAXTEST] of integer =
  62.     (40,800,1000,1200,
  63.     800,500,400,400,
  64.     1200,700,900,700,
  65.     500,500,5,700);
  66. {$ELSE}
  67.   T : array [MINTEST..MAXTEST] of integer =
  68.     (400,8000,10000,12000,
  69.     8000,5000,4000,4000,
  70.     12000,7000,9000,7000,
  71.     5000,5000,50,7000);
  72. {$ENDIF}
  73.  
  74. var
  75.   f       : text;     { output file }
  76.   i       : byte;
  77.   rr      : registers;
  78.   min,max : integer;  { minimum and maximum numbered tests.. }
  79.   ss,
  80.   name    : string;   { name of output file }
  81.  
  82.  
  83.  
  84. Procedure Test(number:byte);
  85. var
  86.   i,j : integer;
  87. begin
  88.   with rr do
  89.     case number of
  90.       { Set video mode }
  91.       0 : for i:=1 to T[0] do begin
  92.             ah := 0; al := 3;
  93.             intr(16,rr);
  94.           end;
  95.       { Set cursor size }
  96.       1 : for i:=1 to T[1] do
  97.             for j:=1 to 10 do begin
  98.               ah := 1; ch := j; cl := j-1;
  99.               intr(16,rr);
  100.             end;
  101.       { Set cursor position }
  102.       2 : for i:=1 to T[2] do
  103.             for j:=1 to 10 do begin
  104.               ah := 2; bh := 0; dh := j; dl := j;
  105.               intr(16,rr);
  106.             end;
  107.       { Read Cursor Position }
  108.       3 : for i:=1 to T[3] do
  109.             for j:=1 to 10 do begin
  110.               ah := 3; bh := 0;
  111.               intr(16,rr);
  112.             end;
  113.       { Read Light Pen position }
  114.       4 : for i:=1 to T[4] do
  115.             for j:=1 to 10 do begin
  116.               ah := 4;
  117.               intr(16,rr);
  118.             end;
  119.       { Set Active Display Page }
  120.       5 : for i:=1 to T[5] do
  121.             for j:=1 to 10 do begin
  122.               ah := 5; al := 0;
  123.               intr(16,rr);
  124.             end;
  125.       { Scroll Up }
  126.       6 : for i:=1 to T[6] do begin
  127.             ah := 6; al := 12; bh := 7; ch := 10; cl := 10; dh := 24; dl := 78;
  128.             intr(16,rr);
  129.           end;
  130.       { Scroll Down }
  131.       7 : for i:=1 to T[7] do begin
  132.             ah := 7; al := 12; bh := 7; ch := 10; cl := 10; dh := 24; dl := 78;
  133.             intr(16,rr);
  134.           end;
  135.       { Read Character And Attribute }
  136.       8 : for i:=1 to T[8] do
  137.             for j:=1 to 10 do begin
  138.               ah := 8; bh := 0;
  139.               intr(16,rr);
  140.             end;
  141.       { Write Character And Attribute }
  142.       9 : for i:=1 to T[9] do
  143.             for j:=1 to 10 do begin
  144.               ah := 9; al := j+47; bh := 0; bl := j; cx := 1;
  145.               intr(16,rr);
  146.             end;
  147.       { Write Character }
  148.       10: for i:=1 to T[10] do
  149.             for j:=1 to 10 do begin
  150.               ah := 10; al := j+47; bh := 0; cx := 1;
  151.               intr(16,rr);
  152.             end;
  153.       { Set Color Palette }
  154.       11: for i:=1 to T[11] do
  155.             for j:=1 to 10 do begin
  156.               ah := 11; bh := 0; bl := 0;
  157.               intr(16,rr);
  158.             end;
  159.       { Write Pixel }
  160.       12: begin
  161.           ah := 0; al := 6; { 640x200 graphics mode } intr(16,rr);
  162.           for i:=1 to T[12] do
  163.             for j:=1 to 10 do begin
  164.               ah := 12; al := 1; bh := 0; cx := i; dx := j;
  165.               intr(16,rr);
  166.             end;
  167.           ah := 0; al := 3; { 80x25 text mode } intr(16,rr);
  168.           end;
  169.       { Read Pixel }
  170.       13: begin
  171.           ah := 0; al := 6; { 640x200 graphics mode } intr(16,rr);
  172.           for i:=1 to T[13] do
  173.             for j:=1 to 10 do begin
  174.               ah := 13; bh := 0; cx := i; dx := j;
  175.               intr(16,rr);
  176.             end;
  177.           ah := 0; al := 3; { 80x25 text mode } intr(16,rr);
  178.           end;
  179.       { Write Character in teletype mode }
  180.       14: for i:=1 to T[14] do begin
  181.             ah := 2; bh := 0; dx := 0; dl := 0; intr(16,rr); { set cursor }
  182.             for j:=1 to 1999 do begin
  183.               ah := 14; al := 30 + i mod 200; bh := 0; intr(16,rr);
  184.             end;
  185.           end;
  186.       { Get video mode }
  187.       15: for i:=1 to T[15] do
  188.             for j:=1 to 10 do begin
  189.               ah := 15; intr(16,rr);
  190.             end;
  191.     end; { case number of }
  192. end;
  193.  
  194.  
  195.  
  196. Function value (s:string):byte;
  197. begin
  198.   s[3] := Upcase(s[3]);
  199.   case s[3] of
  200.     '0'..'9' : value := ord(s[3])-ord('0');
  201.     'A'..'F' : value := ord(s[3])-ord('A')+10;
  202.     else begin
  203.       Writeln('Test number erroneous [',s[3],']');
  204.       Halt(2);
  205.     end;
  206.   end;
  207. end;
  208.  
  209.  
  210.  
  211. Procedure Help;
  212. begin
  213.   Writeln('Sintax : VTEST { [-|/]fname [-|/]t# [-|/]s# [-|/]e# }');
  214.   Writeln('         -fname = results written to "name" file');
  215.   Writeln('         -t#    = Do test # only');
  216.   Writeln('         -s#    = Start testing in test #');
  217.   Writeln('         -e#    = End testing in test #');
  218.   Writeln;
  219.   Writeln('Note : # is any char in [0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f]');
  220.   Halt(0);
  221. end;
  222.  
  223.  
  224.  
  225. begin
  226.   DirectVideo := false;
  227.   Writeln;
  228.   Writeln('Video performance test V1.0 -- Bernardo Zamora Etcharren');
  229.   name := 'results.dat';
  230.   min := MINTEST;
  231.   max := MAXTEST;
  232.   for i:=1 to ParamCount do begin
  233.     ss := ParamStr(i);
  234.     if ss[1] in ['/','-']  then begin
  235.       case Upcase(ss[2]) of
  236.         'F'  : name := Copy(ss,3,Length(ss)-2);
  237.         'T'  : begin min := value(ss); max := value(ss); end;
  238.         'S'  : min := value(ss);
  239.         'E'  : max := value(ss);
  240.         '?','H' : help;
  241.          else begin
  242.            Writeln('Unrecognized option [',ss[2],'], test aborted.');
  243.            halt(1);
  244.          end;
  245.       end { case }
  246.     end { if ss[1] i